SQL FOREIGN KEY Constraint என்றால் என்ன?
FOREIGN KEY கட்டுப்பாடு அட்டவணைகளுக்கு இடையே உள்ள இணைப்புகளை அழிக்கக்கூடிய செயல்களைத் தடுக்கப் பயன்படுகிறது.
FOREIGN KEY என்பது ஒரு அட்டவணையில் உள்ள ஒரு புலம் (அல்லது புலங்களின் தொகுப்பு), இது மற்றொரு அட்டவணையில் உள்ள PRIMARY KEY-ஐக் குறிக்கிறது.
Foreign key உள்ள அட்டவணை child table (குழந்தை அட்டவணை) என்றும், primary key உள்ள அட்டவணை referenced அல்லது parent table (பெற்றோர் அட்டவணை) என்றும் அழைக்கப்படுகிறது.
முக்கியமான குறிப்பு:
FOREIGN KEY கட்டுப்பாடு foreign key நெடுவரிசையில் தவறான தரவுகளைச் செருகுவதைத் தடுக்கிறது, ஏனெனில் அது parent table-ல் உள்ள மதிப்புகளில் ஒன்றாக இருக்க வேண்டும்.
உதாரண அட்டவணைகள்
பின்வரும் இரண்டு அட்டவணைகளைப் பாருங்கள்:
Persons அட்டவணை
| PersonID | LastName | FirstName | Age |
|---|---|---|---|
| 1 | Hansen | Ola | 30 |
| 2 | Svendson | Tove | 23 |
| 3 | Pettersen | Kari | 20 |
Orders அட்டவணை
| OrderID | OrderNumber | PersonID |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 2 |
| 4 | 24562 | 1 |
உறவு பகுப்பாய்வு:
"Orders" அட்டவணையில் உள்ள "PersonID" நெடுவரிசை "Persons" அட்டவணையில் உள்ள "PersonID" நெடுவரிசையைச் சுட்டிக்காட்டுகிறது.
"Persons" அட்டவணையில் உள்ள "PersonID" நெடுவரிசை PRIMARY KEY ஆகும்.
"Orders" அட்டவணையில் உள்ள "PersonID" நெடுவரிசை FOREIGN KEY ஆகும்.
CREATE TABLE-ல் SQL FOREIGN KEY
"Orders" அட்டவணை உருவாக்கப்படும் போது "PersonID" நெடுவரிசையில் FOREIGN KEY உருவாக்க பின்வரும் SQL பயன்படுத்தப்படுகிறது:
MySQL:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
FOREIGN KEY கட்டுப்பாட்டிற்கு பெயரிடுதல்
FOREIGN KEY கட்டுப்பாட்டிற்கு பெயரிடவும், பல நெடுவரிசைகளில் FOREIGN KEY கட்டுப்பாட்டை வரையறுக்கவும், பின்வரும் SQL தொடரியலைப் பயன்படுத்தவும்:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
ALTER TABLE-ல் SQL FOREIGN KEY
"Orders" அட்டவணை ஏற்கனவே உருவாக்கப்பட்ட பிறகு "PersonID" நெடுவரிசையில் FOREIGN KEY கட்டுப்பாட்டை உருவாக்க, பின்வரும் SQL-ஐப் பயன்படுத்தவும்:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
FOREIGN KEY கட்டுப்பாட்டிற்கு பெயரிடுதல்
FOREIGN KEY கட்டுப்பாட்டிற்கு பெயரிடவும், பல நெடுவரிசைகளில் FOREIGN KEY கட்டுப்பாட்டை வரையறுக்கவும், பின்வரும் SQL தொடரியலைப் பயன்படுத்தவும்:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
FOREIGN KEY கட்டுப்பாட்டை நீக்குதல்
FOREIGN KEY கட்டுப்பாட்டை நீக்க, பின்வரும் SQL-ஐப் பயன்படுத்தவும்:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
FOREIGN KEY-ன் நன்மைகள்
தரவு ஒருமைப்பாடு
- தவறான தரவு உள்ளீட்டைத் தடுக்கிறது
- Referential integrity-ஐ பராமரிக்கிறது
- அட்டவணைகளுக்கு இடையே உள்ள உறவுகளைப் பாதுகாக்கிறது
தரவு கட்டமைப்பு
- தருக்கரீதியான தரவு கட்டமைப்பை உருவாக்குகிறது
- Normalization-ஐ ஆதரிக்கிறது
- தரவு மீள்பயன்பாட்டை அனுமதிக்கிறது
குவெரி திறன்
- JOIN செயல்பாடுகளை எளிதாக்குகிறது
- தரவு மீட்பை மேம்படுத்துகிறது
- சிக்கலான குவெரிகளை ஆதரிக்கிறது
நடைமுறை உதாரணங்கள்
ஆர்டர்கள் மற்றும் வாடிக்கையாளர்கள்
ஒவ்வொரு ஆர்டரும் ஒரு வாடிக்கையாளரைச் சேர்ந்தது
CREATE TABLE Orders (
OrderID int PRIMARY KEY,
CustomerID int,
OrderDate date,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
புத்தகங்கள் மற்றும் ஆசிரியர்கள்
ஒவ்வொரு புத்தகமும் ஒரு ஆசிரியரைச் சேர்ந்தது
CREATE TABLE Books (
BookID int PRIMARY KEY,
AuthorID int,
Title varchar(255),
FOREIGN KEY (AuthorID) REFERENCES Authors(AuthorID)
);
மாணவர்கள் மற்றும் வகுப்புகள்
ஒவ்வொரு மாணவரும் ஒரு வகுப்பில் சேர்ந்திருக்கிறார்
CREATE TABLE Students (
StudentID int PRIMARY KEY,
ClassID int,
StudentName varchar(255),
FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)
);